Segundo REPORTE EN QUARTO

Author

Yachay Tech

Published

January 9, 2027

#Titulo 1

#Subtitulo 2

Code
import altair as alt

import pandas as pd

df = pd.read_csv("datos.csv")

# Convertir fechas, fechas inválidas se vuelven NaT
df['eventDate'] = pd.to_datetime(df['eventDate'], errors='coerce')

# Eliminar filas con fechas inválidas (NaT)
df = df.dropna(subset=['eventDate'])

print(df.head())
  institutionCode collectionCode ownerInstitutionCode      basisOfRecord  \
0        INABIOEC      MECN-QCNE               INABIO  PreservedSpecimen   
1        INABIOEC      MECN-QCNE               INABIO  PreservedSpecimen   
2        INABIOEC      MECN-QCNE               INABIO  PreservedSpecimen   
3        INABIOEC      MECN-QCNE               INABIO  PreservedSpecimen   
4        INABIOEC      MECN-QCNE               INABIO  PreservedSpecimen   

  catalogNumber           family     scientificName scientificNameAuthorship  \
0        259958      Agaricaceae        Agaricaceae                 Chevall.   
1        259959     Clavariaceae            Ramaria              Por definir   
2        259960  Sarcoscyphaceae  Cookeina speciosa             (Fr.) Dennis   
3        259961      Agaricaceae            Cyathus              Por definir   
4        260015     Polyporaceae       Polyporaceae             Fr. ex Corda   

      recordedBy recordNumber  eventDate  country stateProvince  
0  Rosa Batallas         2820 2022-03-23  Ecuador     Sucumbíos  
1  Rosa Batallas         2821 2022-03-23  Ecuador     Sucumbíos  
2  Rosa Batallas         2823 2022-03-23  Ecuador     Sucumbíos  
3  Rosa Batallas         2824 2022-03-23  Ecuador     Sucumbíos  
4  Rosa Batallas         2826 2022-03-23  Ecuador     Sucumbíos  

Visualización de registros por familia (gráfico de barras)

Code
alt.Chart(df).mark_bar().encode(
    x=alt.X('count()', title='Número de registros'),
    y=alt.Y('family:N', sort='-x', title='Familia'),
    tooltip=['family', 'count()']
).properties(
    title='Número de registros por familia',
    width=400,
    height=300
)

Distribución temporal de registros (gráfico de líneas)

Code
df['eventDate'] = pd.to_datetime(df['eventDate'])

alt.Chart(df).mark_line(point=True).encode(
    x=alt.X('yearmonth(eventDate):T', title='Fecha'),
    y=alt.Y('count()', title='Número de registros'),
    tooltip=['yearmonth(eventDate):T', 'count()']
).properties(
    title='Registros por fecha',
    width=500
).interactive()

Gráfico de dispersión: Número de colecta vs. Número de catálogo

Code
alt.Chart(df).mark_circle(size=100).encode(
    x='recordNumber:N',
    y='catalogNumber:Q',
    color='family:N',
    tooltip=['recordNumber', 'catalogNumber', 'family', 'scientificName']
).properties(
    title='Relación entre número de colecta y número de catálogo',
    width=500,
    height=300
).interactive()

Cantidad de especies provincia (gráfico de barras apiladas)

Code
alt.Chart(df).mark_bar().encode(
    x=alt.X('count()', title='Número de registros'),
    y=alt.Y('stateProvince:N', title='Provincia'),
    color='country:N',
    tooltip=['country', 'stateProvince', 'count()']
).properties(
    title='Registros por país y provincia',
    width=400,
    height=300
)

###Subtitulo3

-lista -elemento 1 -elemento 2